home *** CD-ROM | disk | FTP | other *** search
/ PD Collection CD 1 / PD Collection CD 1.iso / textual / tex / files / !tex / TeXsource / commontex / c / cmds < prev    next >
Encoding:
Text File  |  1988-04-18  |  44.7 KB  |  1,408 lines

  1. /*
  2.  *    Copyright 1986, 1987 Pat Joseph Monardo. All rights reserved.
  3.  *    Copying of this file is granted according to the provisions 
  4.  *    specified in the file COPYING which must accompany this file.
  5.  */
  6.  
  7.  
  8. /*
  9.  *              cmds.c
  10.  */
  11.  
  12. #include        "tex.h"
  13. #include        "texext.h"
  14. #include        "heap.h"
  15. #include        "eq.h"
  16. #include        "eqstack.h"
  17. #include        "str.h"
  18. #include        "hash.h"
  19. #include        "token.h"
  20. #include        "tokenlists.h"
  21. #include        "tokenstack.h"
  22. #include        "scan.h"
  23. #include        "evalstack.h"
  24. #include        "def.h"
  25. #include        "cond.h"
  26. #include        "expand.h"
  27. #include        "box.h"
  28. #include        "boxlists.h"
  29. #include        "tfm.h"
  30. #include        "math.h"
  31. #include        "mathlists.h"
  32. #include        "align.h"
  33. #include        "error.h"
  34. #include        "print.h"
  35. #include        "cmds.h"
  36.  
  37. #define chr_cmd(S) \
  38.         {print(S);  print_ASCII(chr_code);}
  39.  
  40. show_cur_cmd_chr()
  41. {
  42.         begin_diagnostic();
  43.         print_nl("{");
  44.         if (mode != shown_mode) {
  45.                 print_mode(mode);
  46.                 print(": ");
  47.                 shown_mode = mode;
  48.         }
  49.         print_cmd_chr(cur_cmd, cur_chr);
  50.         print_char('}'); 
  51.         end_diagnostic(FALSE);
  52. }
  53.  
  54. print_cmd_chr (cmd, chr_code)
  55.         qword   cmd;
  56.         hword   chr_code;
  57. {
  58.         switch (cmd)
  59.         {
  60.         case RELAX:
  61.                 print_esc("relax"); 
  62.                 break;
  63.  
  64.         case LEFT_BRACE:
  65.                 chr_cmd("begin-group character "); 
  66.                 break;
  67.  
  68.         case RIGHT_BRACE:
  69.                 chr_cmd("end-group character "); 
  70.                 break;
  71.  
  72.         case MATH_SHIFT:
  73.                 chr_cmd("math shift character "); 
  74.                 break;
  75.  
  76.         case TAB_MARK:
  77.                  if (chr_code == SPAN_CODE)
  78.                         print_esc("span");
  79.                 else chr_cmd("alignment tab character "); 
  80.                 break;
  81.  
  82.         case CAR_RET:
  83.                  if (chr_code == CR_CODE)
  84.                         print_esc("cr");
  85.                 else print_esc("crcr"); 
  86.                 break;
  87.  
  88.         case MAC_PARAM:
  89.                 chr_cmd("macro parameter character "); 
  90.                 break;
  91.  
  92.         case SUP_MARK:
  93.                 chr_cmd("superscript character "); 
  94.                 break;
  95.  
  96.         case SUB_MARK:
  97.                 chr_cmd("subscript character "); 
  98.                 break;
  99.  
  100.         case ENDV:
  101.                 print("end of alignment template"); 
  102.                 break;
  103.  
  104.         case SPACER:
  105.                 chr_cmd("blank space "); 
  106.                 break;
  107.  
  108.         case LETTER:
  109.                 chr_cmd("the letter "); 
  110.                 break;
  111.  
  112.         case OTHER_CHAR:
  113.                 chr_cmd("the character "); 
  114.                 break;
  115.  
  116.         case ASSIGN_GLUE:
  117.         case ASSIGN_MU_GLUE:
  118.                 if (chr_code < SKIP_BASE)
  119.                         print_skip_param(chr_code - GLUE_BASE);
  120.                 else if (chr_code < MU_SKIP_BASE) {
  121.                         print_esc("skip"); 
  122.                         print_int(chr_code - SKIP_BASE);
  123.                 } else {
  124.                         print_esc("muskip");
  125.                         print_int(chr_code - MU_SKIP_BASE);
  126.                 } 
  127.                 break;
  128.  
  129.         case ASSIGN_TOKS:
  130.                 if (chr_code >= TOKS_BASE) {
  131.                         print_esc("toks");
  132.                         print_int(chr_code - TOKS_BASE);
  133.                 } else {
  134.                         switch (chr_code)
  135.                         {
  136.                         case OUTPUT_ROUTINE_LOC:
  137.                                 print_esc("output"); 
  138.                                 break;
  139.  
  140.                         case EVERY_PAR_LOC:
  141.                                 print_esc("everypar"); 
  142.                                 break;
  143.  
  144.                         case EVERY_MATH_LOC:
  145.                                 print_esc("everymath"); 
  146.                                 break;
  147.  
  148.                         case EVERY_DISPLAY_LOC:
  149.                                 print_esc("everydisplay"); 
  150.                                 break;
  151.  
  152.                         case EVERY_HBOX_LOC:
  153.                                 print_esc("everyhbox"); 
  154.                                 break;
  155.  
  156.                         case EVERY_VBOX_LOC:
  157.                                 print_esc("everyvbox"); 
  158.                                 break;
  159.  
  160.                         case EVERY_JOB_LOC:
  161.                                 print_esc("everyjob"); 
  162.                                 break;
  163.  
  164.                         case EVERY_CR_LOC:
  165.                                 print_esc("everycr"); 
  166.                                 break;
  167.  
  168.                         default:
  169.                                 print_esc("errhelp"); 
  170.                                 break;
  171.                         }
  172.                 }
  173.                 break;
  174.  
  175.         case ASSIGN_INT:
  176.                 if (chr_code < COUNT_BASE)
  177.                         print_param(chr_code - INT_BASE);
  178.                 else {
  179.                         print_esc("count");
  180.                         print_int(chr_code - COUNT_BASE);
  181.                 } 
  182.                 break;
  183.  
  184.         case ASSIGN_DIMEN:
  185.                 if (chr_code < SCALED_BASE)
  186.                         print_length_param(chr_code - DIMEN_BASE);
  187.                 else {
  188.                         print_esc("dimen");
  189.                         print_int(chr_code - SCALED_BASE);
  190.                 } 
  191.                 break;
  192.  
  193.         case ACCENT:
  194.                 print_esc("accent"); 
  195.                 break;
  196.  
  197.         case ADVANCE:
  198.                 print_esc("advance"); 
  199.                 break;
  200.  
  201.         case AFTER_ASSIGNMENT:
  202.                 print_esc("afterassignment"); 
  203.                 break;
  204.  
  205.         case AFTER_GROUP:
  206.                 print_esc("aftergroup"); 
  207.                 break;
  208.  
  209.         case ASSIGN_FONT_DIMEN:
  210.                 print_esc("fontdimen"); 
  211.                 break;
  212.  
  213.         case BEGIN_GROUP:
  214.                 print_esc("begingroup"); 
  215.                 break;
  216.  
  217.         case BREAK_PENALTY:
  218.                 print_esc("penalty"); 
  219.                 break;
  220.  
  221.         case CHAR_NUM:
  222.                 print_esc("char"); 
  223.                 break;
  224.  
  225.         case CS_NAME:
  226.                 print_esc("csname"); 
  227.                 break;
  228.  
  229.         case DEF_FONT:
  230.                 print_esc("font"); 
  231.                 break;
  232.  
  233.         case DELIM_NUM:
  234.                 print_esc("delimiter"); 
  235.                 break;
  236.  
  237.         case DIVIDE:
  238.                 print_esc("divide"); 
  239.                 break;
  240.  
  241.         case END_CS_NAME:
  242.                 print_esc("endcsname"); 
  243.                 break;
  244.  
  245.         case END_GROUP:
  246.                 print_esc("endgroup"); 
  247.                 break;
  248.  
  249.         case EX_SPACE:
  250.                 print_esc(" "); 
  251.                 break;
  252.  
  253.         case EXPAND_AFTER:
  254.                 print_esc("expandafter"); 
  255.                 break;
  256.  
  257.         case INPUT:
  258.                  if (chr_code == 0)
  259.                         print_esc("input");
  260.                 else print_esc("endinput"); 
  261.                 break;
  262.  
  263.         case HALIGN:
  264.                 print_esc("halign"); 
  265.                 break;
  266.  
  267.         case HRULE:
  268.                 print_esc("hrule"); 
  269.                 break;
  270.  
  271.         case IGNORE_SPACES:
  272.                 print_esc("ignorespaces"); 
  273.                 break;
  274.  
  275.         case INSERT:
  276.                 print_esc("insert"); 
  277.                 break;
  278.  
  279.         case ITAL_CORR:
  280.                 print_esc("/"); 
  281.                 break;
  282.  
  283.         case MARK:
  284.                 print_esc("mark"); 
  285.                 break;
  286.  
  287.         case TOP_BOT_MARK:
  288.                 switch (chr_code)
  289.                 {
  290.                 case TOP_MARK_CODE:
  291.                         print_esc("topmark"); 
  292.                         break;
  293.  
  294.                 case FIRST_MARK_CODE:
  295.                         print_esc("firstmark"); 
  296.                         break;
  297.  
  298.                 case BOT_MARK_CODE:
  299.                         print_esc("botmark"); 
  300.                         break;
  301.  
  302.                 case SPLIT_FIRST_MARK_CODE:
  303.                         print_esc("splitfirstmark"); 
  304.                         break;
  305.  
  306.                 case SPLIT_BOT_MARK_CODE:
  307.                         print_esc("splitbotmark"); 
  308.                         break;
  309.                 }
  310.                 break;
  311.  
  312.         case MATH_ACCENT:
  313.                 print_esc("mathaccent"); 
  314.                 break;
  315.  
  316.         case MATH_CHAR_NUM:
  317.                 print_esc("mathchar"); 
  318.                 break;
  319.  
  320.         case MATH_CHOICE:
  321.                 print_esc("mathchoice"); 
  322.                 break;
  323.  
  324.         case MULTIPLY:
  325.                 print_esc("multiply"); 
  326.                 break;
  327.  
  328.         case NO_ALIGN:
  329.                 print_esc("noalign"); 
  330.                 break;
  331.  
  332.         case NO_EXPAND:
  333.                 print_esc("noexpand"); 
  334.                 break;
  335.  
  336.         case NON_SCRIPT:
  337.                 print_esc("nonscript"); 
  338.                 break;
  339.  
  340.         case OMIT:
  341.                 print_esc("omit"); 
  342.                 break;
  343.  
  344.         case RADICAL:
  345.                 print_esc("radical"); 
  346.                 break;
  347.  
  348.         case READ_TO_CS:
  349.                 print_esc("read"); 
  350.                 break;
  351.  
  352.         case SET_BOX:
  353.                 print_esc("setbox"); 
  354.                 break;
  355.  
  356.         case SET_PREV_GRAF:
  357.                 print_esc("prevgraf"); 
  358.                 break;
  359.  
  360.         case SET_SHAPE:
  361.                 print_esc("parshape"); 
  362.                 break;
  363.  
  364.         case THE:
  365.                 print_esc("the"); 
  366.                 break;
  367.  
  368.         case TOKS_REGISTER:
  369.                 print_esc("toks"); 
  370.                 break;
  371.  
  372.         case VADJUST:
  373.                 print_esc("vadjust"); 
  374.                 break;
  375.  
  376.         case VALIGN:
  377.                 print_esc("valign"); 
  378.                 break;
  379.  
  380.         case VCENTER:
  381.                 print_esc("vcenter"); 
  382.                 break;
  383.  
  384.         case VRULE:
  385.                 print_esc("vrule"); 
  386.                 break;
  387.  
  388.         case PAR_END:
  389.                 print_esc("par"); 
  390.                 break;
  391.  
  392.         case SET_AUX:
  393.                  if (chr_code == VMODE)
  394.                         print_esc("prevdepth");
  395.                 else print_esc("spacefactor"); 
  396.                 break;
  397.  
  398.         case SET_PAGE_INT:
  399.                  if (chr_code == 0)
  400.                         print_esc("deadcycles");
  401.                 else print_esc("insertpenalties"); 
  402.                 break;
  403.  
  404.         case SET_BOX_DIMEN:
  405.                 if (chr_code == WIDTH_OFFSET)
  406.                         print_esc("wd");
  407.                 else if (chr_code == HEIGHT_OFFSET)
  408.                         print_esc("ht");
  409.                 else print_esc("dp"); 
  410.                 break;
  411.  
  412.         case SET_PAGE_DIMEN:
  413.                 switch (chr_code)
  414.                 {
  415.                 case 0:
  416.                         print_esc("pagegoal"); 
  417.                         break;
  418.  
  419.                 case 1:
  420.                         print_esc("pagetotal"); 
  421.                         break;
  422.  
  423.                 case 2:
  424.                         print_esc("pagestretch"); 
  425.                         break;
  426.  
  427.                 case 3:
  428.                         print_esc("pagefilstretch"); 
  429.                         break;
  430.  
  431.                 case 4:
  432.                         print_esc("pagefillstretch"); 
  433.                         break;
  434.  
  435.                 case 5:
  436.                         print_esc("pagefilllstretch"); 
  437.                         break;
  438.  
  439.                 case 6:
  440.                         print_esc("pageshrink"); 
  441.                         break;
  442.                 }
  443.                 break;
  444.  
  445.         case LAST_ITEM:
  446.                  if (chr_code == INT_VAL)
  447.                         print_esc("lastpenalty");
  448.                 else if (chr_code == DIMEN_VAL)
  449.                         print_esc("lastkern");
  450.                 else print_esc("lastskip"); 
  451.                 break;
  452.  
  453.         case REGISTER:
  454.                  if (chr_code == INT_VAL)
  455.                         print_esc("count");
  456.                 else if (chr_code == DIMEN_VAL)
  457.                         print_esc("dimen");
  458.                 else if (chr_code == GLUE_VAL)
  459.                         print_esc("skip");
  460.                 else print_esc("muskip"); 
  461.                 break;
  462.  
  463.         case CONVERT:
  464.                 switch (chr_code)
  465.                 {
  466.                 case NUMBER_CODE:
  467.                         print_esc("number"); 
  468.                         break;
  469.  
  470.                 case ROMAN_NUMERAL_CODE:
  471.                         print_esc("romannumeral"); 
  472.                         break;
  473.  
  474.                 case STRING_CODE:
  475.                         print_esc("string"); 
  476.                         break;
  477.  
  478.                 case MEANING_CODE:
  479.                         print_esc("meaning"); 
  480.                         break;
  481.  
  482.                 case FONT_NAME_CODE:
  483.                         print_esc("fontname"); 
  484.                         break;
  485.  
  486.                 default:
  487.                         print_esc("jobname"); 
  488.                         break;
  489.                 }
  490.                 break;
  491.  
  492.         case IF_TEST:
  493.                 switch (chr_code)
  494.                 {
  495.                 case IF_CHAR_CODE:
  496.                         print_esc("if"); 
  497.                         break;
  498.  
  499.                 case IF_CAT_CODE:
  500.                         print_esc("ifcat"); 
  501.                         break;
  502.  
  503.                 case IF_INT_CODE:
  504.                         print_esc("ifnum"); 
  505.                         break;
  506.  
  507.                 case IF_DIM_CODE:
  508.                         print_esc("ifdim"); 
  509.                         break;
  510.  
  511.                 case IF_ODD_CODE:
  512.                         print_esc("ifodd"); 
  513.                         break;
  514.  
  515.                 case IF_VMODE_CODE:
  516.                         print_esc("ifvmode"); 
  517.                         break;
  518.  
  519.                 case IF_HMODE_CODE:
  520.                         print_esc("ifhmode"); 
  521.                         break;
  522.  
  523.                 case IF_MMODE_CODE:
  524.                         print_esc("ifmmode"); 
  525.                         break;
  526.  
  527.                 case IF_INNER_CODE:
  528.                         print_esc("ifinner"); 
  529.                         break;
  530.  
  531.                 case IF_VOID_CODE:
  532.                         print_esc("ifvoid"); 
  533.                         break;
  534.  
  535.                 case IF_HBOX_CODE:
  536.                         print_esc("ifhbox"); 
  537.                         break;
  538.  
  539.                 case IF_VBOX_CODE:
  540.                         print_esc("ifvbox"); 
  541.                         break;
  542.  
  543.                 case IFX_CODE:
  544.                         print_esc("ifx"); 
  545.                         break;
  546.  
  547.                 case IF_EOF_CODE:
  548.                         print_esc("ifeof"); 
  549.                         break;
  550.  
  551.                 case IF_TRUE_CODE:
  552.                         print_esc("iftrue"); 
  553.                         break;
  554.  
  555.                 case IF_FALSE_CODE:
  556.                         print_esc("iffalse"); 
  557.                         break;
  558.  
  559.                 case IF_CASE_CODE:
  560.                         print_esc("ifcase"); 
  561.                         break;
  562.                 }
  563.                 break;
  564.  
  565.         case FI_OR_ELSE:
  566.                 if (chr_code == FI_CODE)
  567.                         print_esc("fi");
  568.                 else if (chr_code == OR_CODE)
  569.                         print_esc("or");
  570.                 else print_esc("else"); 
  571.                 break;
  572.  
  573.         case PREFIX:
  574.                 if (chr_code == 1)
  575.                         print_esc("long");
  576.                 else if (chr_code == 2)
  577.                         print_esc("outer");
  578.                 else print_esc("global"); 
  579.                 break;
  580.  
  581.         case DEF:
  582.                 if (chr_code == 0)
  583.                         print_esc("def");
  584.                 else if (chr_code == 1)
  585.                         print_esc("gdef");
  586.                 else if (chr_code == 2)
  587.                         print_esc("edef");
  588.                 else print_esc("xdef");
  589.                 break;
  590.  
  591.         case LET:
  592.                 if (chr_code != NORMAL)
  593.                         print_esc("futurelet");
  594.                 else print_esc("let"); 
  595.                 break;
  596.  
  597.         case SHORTHAND_DEF:
  598.                 switch (chr_code)
  599.                 {
  600.                 case CHAR_DEF_CODE:
  601.                         print_esc("chardef"); 
  602.                         break;
  603.  
  604.                 case MATH_CHAR_DEF_CODE:
  605.                         print_esc("mathchardef"); 
  606.                         break;
  607.  
  608.                 case COUNT_DEF_CODE:
  609.                         print_esc("countdef"); 
  610.                         break;
  611.  
  612.                 case DIMEN_DEF_CODE:
  613.                         print_esc("dimendef"); 
  614.                         break;
  615.  
  616.                 case SKIP_DEF_CODE:
  617.                         print_esc("skipdef"); 
  618.                         break;
  619.  
  620.                 case MU_SKIP_DEF_CODE:
  621.                         print_esc("muskipdef"); 
  622.                         break;
  623.  
  624.                 default:
  625.                         print_esc("toksdef"); 
  626.                         break;
  627.                 }
  628.                 break;
  629.  
  630.         case CHAR_GIVEN:
  631.                 print_esc("char");
  632.                 print_hex((val) chr_code); 
  633.                 break;
  634.  
  635.         case MATH_GIVEN:
  636.                 print_esc("mathchar");
  637.                 print_hex((val) chr_code); 
  638.                 break;
  639.  
  640.         case DEF_CODE:
  641.                 if (chr_code == CAT_CODE_BASE)
  642.                         print_esc("catcode");
  643.                 else if (chr_code == MATH_CODE_BASE)
  644.                         print_esc("mathcode");
  645.                 else if (chr_code == LC_CODE_BASE)
  646.                         print_esc("lccode");
  647.                 else if (chr_code == UC_CODE_BASE)
  648.                         print_esc("uccode");
  649.                 else if (chr_code == SF_CODE_BASE)
  650.                         print_esc("sfcode");
  651.                 else print_esc("delcode"); 
  652.                 break;
  653.  
  654.         case DEF_FAMILY:
  655.                 print_size(chr_code - MATH_FONT_BASE); 
  656.                 break;
  657.  
  658.         case SET_FONT:
  659.                 print("select font ");
  660.                 print_str(font_name[chr_code]);
  661.                 if (font_size[chr_code] != font_dsize[chr_code]) {
  662.                         print(" at ");
  663.                         print_scaled(font_size[chr_code]);
  664.                         print("pt");
  665.                 } 
  666.                 break;
  667.  
  668.         case ASSIGN_FONT_INT:
  669.                 if (chr_code == 1)
  670.                         print_esc("skewchar");
  671.                 else print_esc("hyphenchar"); 
  672.                 break;
  673.  
  674.         case HYPH_DATA:
  675.                 if (chr_code == 1)
  676.                         print_esc("patterns");
  677.                 else print_esc("hyphenation"); 
  678.                 break;
  679.  
  680.         case SET_INTERACTION:
  681.                 switch (chr_code)
  682.                 {
  683.                 case BATCH_MODE:
  684.                         print_esc("batchmode"); 
  685.                         break;
  686.  
  687.                 case NONSTOP_MODE:
  688.                         print_esc("nonstop"); 
  689.                         break;
  690.  
  691.                 case SCROLL_MODE:
  692.                         print_esc("scrollmode");/*DIFF*/ 
  693.                         break;
  694.  
  695.                 default:
  696.                         print_esc("errorstopmode"); 
  697.                         break;
  698.                 }
  699.                 break;
  700.  
  701.         case IN_STREAM:
  702.                 if (chr_code == 0)
  703.                         print_esc("closein");
  704.                 else print_esc("openin"); 
  705.                 break;
  706.  
  707.         case MESSAGE:
  708.                 if (chr_code == 0)
  709.                         print_esc("message");
  710.                 else print_esc("errmessage"); 
  711.                 break;
  712.  
  713.         case CASE_SHIFT:
  714.                 if (chr_code == LC_CODE_BASE)   
  715.                         print_esc("lowercase");
  716.                 else print_esc("uppercase"); 
  717.                 break;
  718.  
  719.         case XRAY:
  720.                 switch (chr_code)
  721.                 {
  722.                 case SHOW_BOX_CODE:
  723.                         print_esc("showbox"); 
  724.                         break;
  725.  
  726.                 case SHOW_THE_CODE:
  727.                         print_esc("showthe"); 
  728.                         break;
  729.  
  730.                 case SHOW_LISTS:
  731.                         print_esc("showlists"); 
  732.                         break;
  733.  
  734.                 default:
  735.                         print_esc("show"); 
  736.                         break;
  737.                 }
  738.                 break;
  739.  
  740.         case UNDEFINED_CS:
  741.                 print("undefined"); 
  742.                 break;
  743.  
  744.         case CALL:
  745.                 print("macro"); 
  746.                 break;
  747.  
  748.         case LONG_CALL:
  749.                 print_esc("long macro"); /*DIFF*/
  750.                 break;
  751.  
  752.         case OUTER_CALL:
  753.                 print_esc("outer macro"); 
  754.                 break;
  755.  
  756.         case LONG_OUTER_CALL:
  757.                 print_esc("long");
  758.                 print_esc("outer macro"); 
  759.                 break;
  760.  
  761.         case END_TEMPLATE:
  762.                 print_esc("outer endtemplate"); 
  763.                 break;
  764.  
  765.         case STOP:
  766.                 if (chr_code == 1)
  767.                         print_esc("dump"); 
  768.                 else print_esc("end"); 
  769.                 break;
  770.  
  771.         case HSKIP:
  772.                 switch (chr_code)
  773.                 {
  774.                 case SKIP_CODE:
  775.                         print_esc("hskip"); 
  776.                         break;
  777.  
  778.                 case FIL_CODE:
  779.                         print_esc("hfil"); 
  780.                         break;
  781.  
  782.                 case FILL_CODE:
  783.                         print_esc("hfill"); 
  784.                         break;
  785.  
  786.                 case SS_CODE:
  787.                         print_esc("hss"); 
  788.                         break;
  789.  
  790.                 default:
  791.                         print_esc("hfilneg"); 
  792.                         break;
  793.                 }
  794.                 break;
  795.  
  796.         case VSKIP:
  797.                 switch (chr_code)
  798.                 {
  799.                 case SKIP_CODE:
  800.                         print_esc("vskip"); 
  801.                         break;
  802.  
  803.                 case FIL_CODE:
  804.                         print_esc("vfil"); 
  805.                         break;
  806.  
  807.                 case FILL_CODE:
  808.                         print_esc("vfill"); 
  809.                         break;
  810.  
  811.                 case SS_CODE:
  812.                         print_esc("vss"); 
  813.                         break;
  814.  
  815.                 default:
  816.                         print_esc("vfilneg"); 
  817.                         break;
  818.                 }
  819.                 break;
  820.  
  821.         case MSKIP:
  822.                 print_esc("mskip"); 
  823.                 break;
  824.  
  825.         case KERN:
  826.                 print_esc("kern"); 
  827.                 break;
  828.  
  829.         case MKERN:
  830.                 print_esc("mkern"); 
  831.                 break;
  832.  
  833.         case HMOVE:
  834.                 if (chr_code == 1)
  835.                         print_esc("moveleft");
  836.                 else print_esc("moveright"); 
  837.                 break;
  838.  
  839.         case VMOVE:
  840.                 if (chr_code == 1)
  841.                         print_esc("raise");
  842.                 else print_esc("lower"); 
  843.                 break;
  844.  
  845.         case MAKE_BOX:
  846.                 switch (chr_code)
  847.                 {
  848.                 case BOX_CODE:
  849.                         print_esc("box"); 
  850.                         break;
  851.  
  852.                 case COPY_CODE:
  853.                         print_esc("copy"); 
  854.                         break;
  855.  
  856.                 case LAST_BOX_CODE:
  857.                         print_esc("lastbox"); 
  858.                         break;
  859.  
  860.                 case VSPLIT_CODE:
  861.                         print_esc("vsplit"); 
  862.                         break;
  863.  
  864.                 case VTOP_CODE:
  865.                         print_esc("vtop"); 
  866.                         break;
  867.  
  868.                 case VTOP_CODE + VMODE:
  869.                         print_esc("vbox"); 
  870.                         break;
  871.  
  872.                 default:
  873.                         print_esc("hbox");
  874.                         break;
  875.                 } 
  876.                 break;
  877.  
  878.         case LEADER_SHIP:
  879.                 if (chr_code == A_LEADERS)
  880.                         print_esc("leaders");
  881.                 else if (chr_code == C_LEADERS)
  882.                         print_esc("cleaders");
  883.                 else if (chr_code == X_LEADERS)
  884.                         print_esc("xleaders");
  885.                 else print_esc("shipout"); 
  886.                 break;
  887.  
  888.         case START_PAR:
  889.                 if (chr_code == 0)
  890.                         print_esc("noindent");
  891.                 else print_esc("indent"); 
  892.                 break;
  893.  
  894.         case REMOVE_ITEM:
  895.                 if (chr_code == GLUE_NODE)
  896.                         print_esc("unskip");
  897.                 else if (chr_code == KERN_NODE)
  898.                         print_esc("unkern");
  899.                 else print_esc("unpenalty"); 
  900.                 break;
  901.  
  902.         case UN_HBOX:
  903.                 if (chr_code == COPY_CODE)
  904.                         print_esc("unhcopy");
  905.                 else print_esc("unhbox"); 
  906.                 break;
  907.  
  908.         case UN_VBOX:
  909.                 if (chr_code == COPY_CODE)
  910.                         print_esc("unvcopy");
  911.                 else print_esc("unvbox"); 
  912.                 break;
  913.  
  914.         case DISCRETIONARY:
  915.                 if (chr_code == 1)
  916.                         print_esc("-");  
  917.                 else print_esc("discretionary"); 
  918.                 break;
  919.  
  920.         case EQ_NO:
  921.                 if (chr_code == 1)
  922.                         print_esc("leqno");
  923.                 else print_esc("eqno"); 
  924.                 break;
  925.  
  926.         case MATH_COMP:
  927.                 switch (chr_code)
  928.                 {
  929.                 case ORD_NOAD:
  930.                         print_esc("mathord"); 
  931.                         break;
  932.  
  933.                 case OP_NOAD:
  934.                         print_esc("mathop"); 
  935.                         break;
  936.  
  937.                 case BIN_NOAD:
  938.                         print_esc("mathbin"); 
  939.                         break;
  940.  
  941.                 case REL_NOAD:
  942.                         print_esc("mathrel"); 
  943.                         break;
  944.  
  945.                 case OPEN_NOAD:
  946.                         print_esc("mathopen"); 
  947.                         break;
  948.  
  949.                 case CLOSE_NOAD:
  950.                         print_esc("mathclose"); 
  951.                         break;
  952.  
  953.                 case PUNCT_NOAD:
  954.                         print_esc("mathpunct"); 
  955.                         break;
  956.  
  957.                 case INNER_NOAD:
  958.                         print_esc("mathinner"); 
  959.                         break;
  960.  
  961.                 case UNDER_NOAD:
  962.                         print_esc("underline"); 
  963.                         break;
  964.  
  965.                 default:
  966.                         print_esc("overline"); 
  967.                         break;
  968.                 }
  969.                 break;
  970.  
  971.         case LIMIT_SWITCH:
  972.                  if (chr_code == LIMITS)
  973.                         print_esc("limits");
  974.                 else if (chr_code == NO_LIMITS)
  975.                         print_esc("nolimits");
  976.                 else print_esc("displaylimits"); 
  977.                 break;
  978.  
  979.         case MATH_STYLE:
  980.                 print_style(chr_code); 
  981.                 break;
  982.  
  983.         case ABOVE:
  984.                 switch (chr_code)
  985.                 {
  986.                 case OVER_CODE:
  987.                         print_esc("over"); 
  988.                         break;
  989.  
  990.                 case ATOP_CODE:
  991.                         print_esc("atop"); 
  992.                         break;
  993.  
  994.                 case DELIMITED_CODE + ABOVE_CODE:
  995.                         print_esc("abovewithdelims"); 
  996.                         break;
  997.  
  998.                 case DELIMITED_CODE + OVER_CODE:
  999.                         print_esc("overwithdelims"); 
  1000.                         break;
  1001.  
  1002.                 case DELIMITED_CODE + ATOP_CODE:
  1003.                         print_esc("atopwithdelims"); 
  1004.                         break;
  1005.  
  1006.                 default:
  1007.                         print_esc("above"); 
  1008.                         break;
  1009.                 }
  1010.                 break;
  1011.  
  1012.         case LEFT_RIGHT:
  1013.                  if (chr_code == LEFT_NOAD)
  1014.                         print_esc("left");
  1015.                 else print_esc("right"); 
  1016.                 break;
  1017.  
  1018.         case EXTENSION:
  1019.                 switch (chr_code) {
  1020.                 case OPEN_NODE:
  1021.                         print_esc("openout"); 
  1022.                         break;
  1023.  
  1024.                 case WRITE_NODE:
  1025.                         print_esc("write"); 
  1026.                         break;
  1027.  
  1028.                 case CLOSE_NODE:
  1029.                         print_esc("closeout"); 
  1030.                         break;
  1031.  
  1032.                 case SPECIAL_NODE:
  1033.                         print_esc("special"); 
  1034.                         break;
  1035.  
  1036.                 case IMMEDIATE_CODE:
  1037.                         print_esc("immediate"); 
  1038.                         break;
  1039.                 }
  1040.                 break;
  1041.         }
  1042.  }
  1043.  
  1044. init_cmds ()
  1045. {
  1046. #ifdef INIT
  1047. no_new_control_sequence = FALSE;
  1048. primitive("lineskip", ASSIGN_GLUE, GLUE_BASE + LINE_SKIP_CODE); 
  1049. primitive("baselineskip", ASSIGN_GLUE, GLUE_BASE + BASELINE_SKIP_CODE); 
  1050. primitive("parskip", ASSIGN_GLUE, GLUE_BASE + PAR_SKIP_CODE); 
  1051. primitive("abovedisplayskip", ASSIGN_GLUE,
  1052. GLUE_BASE + ABOVE_DISPLAY_SKIP_CODE); 
  1053. primitive("abovedisplayshortskip", ASSIGN_GLUE,
  1054. GLUE_BASE + ABOVE_DISPLAY_SHORT_SKIP_CODE); 
  1055. primitive("belowdisplayskip", ASSIGN_GLUE,
  1056. GLUE_BASE + BELOW_DISPLAY_SKIP_CODE); 
  1057. primitive("belowdisplayshortskip", ASSIGN_GLUE,
  1058. GLUE_BASE + BELOW_DISPLAY_SHORT_SKIP_CODE); 
  1059. primitive("leftskip", ASSIGN_GLUE, GLUE_BASE + LEFT_SKIP_CODE); 
  1060. primitive("rightskip", ASSIGN_GLUE, GLUE_BASE + RIGHT_SKIP_CODE); 
  1061. primitive("topskip", ASSIGN_GLUE, GLUE_BASE + TOP_SKIP_CODE); 
  1062. primitive("splittopskip", ASSIGN_GLUE, GLUE_BASE + SPLIT_TOP_SKIP_CODE); 
  1063. primitive("tabskip", ASSIGN_GLUE, GLUE_BASE + TAB_SKIP_CODE); 
  1064. primitive("spaceskip", ASSIGN_GLUE, GLUE_BASE + SPACE_SKIP_CODE); 
  1065. primitive("xspaceskip", ASSIGN_GLUE, GLUE_BASE + XSPACE_SKIP_CODE); 
  1066. primitive("parfillskip", ASSIGN_GLUE, GLUE_BASE + PAR_FILL_SKIP_CODE); 
  1067. primitive("thinmuskip", ASSIGN_MU_GLUE, GLUE_BASE + THIN_MU_SKIP_CODE); 
  1068. primitive("medmuskip", ASSIGN_MU_GLUE, GLUE_BASE + MED_MU_SKIP_CODE); 
  1069. primitive("thickmuskip", ASSIGN_MU_GLUE, GLUE_BASE + THICK_MU_SKIP_CODE); 
  1070. primitive("output", ASSIGN_TOKS, OUTPUT_ROUTINE_LOC);
  1071. primitive("everycr", ASSIGN_TOKS, EVERY_CR_LOC);
  1072. primitive("everypar", ASSIGN_TOKS, EVERY_PAR_LOC);
  1073. primitive("everymath", ASSIGN_TOKS, EVERY_MATH_LOC);
  1074. primitive("everydisplay", ASSIGN_TOKS, EVERY_DISPLAY_LOC);
  1075. primitive("everyhbox", ASSIGN_TOKS, EVERY_HBOX_LOC);
  1076. primitive("everyvbox", ASSIGN_TOKS, EVERY_VBOX_LOC);
  1077. primitive("everyjob", ASSIGN_TOKS, EVERY_JOB_LOC);
  1078. primitive("errhelp", ASSIGN_TOKS, ERR_HELP_LOC);
  1079. primitive("pretolerance", ASSIGN_INT, INT_BASE + PRETOLERANCE_CODE);
  1080. primitive("tolerance", ASSIGN_INT, INT_BASE + TOLERANCE_CODE);
  1081. primitive("linepenalty", ASSIGN_INT, INT_BASE + LINE_PENALTY_CODE);
  1082. primitive("hyphenpenalty", ASSIGN_INT, INT_BASE + HYPHEN_PENALTY_CODE);
  1083. primitive("exhyphenpenalty", ASSIGN_INT, INT_BASE + EX_HYPHEN_PENALTY_CODE);
  1084. primitive("clubpenalty", ASSIGN_INT, INT_BASE + CLUB_PENALTY_CODE);
  1085. primitive("widowpenalty", ASSIGN_INT, INT_BASE + WIDOW_PENALTY_CODE);
  1086. primitive("displaywidowpenalty", ASSIGN_INT,
  1087. INT_BASE + DISPLAY_WIDOW_PENALTY_CODE);
  1088. primitive("brokenpenalty", ASSIGN_INT, INT_BASE + BROKEN_PENALTY_CODE);
  1089. primitive("binoppenalty", ASSIGN_INT, INT_BASE + BIN_OP_PENALTY_CODE);
  1090. primitive("relpenalty", ASSIGN_INT, INT_BASE + REL_PENALTY_CODE);
  1091. primitive("predisplaypenalty", ASSIGN_INT,
  1092. INT_BASE + PRE_DISPLAY_PENALTY_CODE);
  1093. primitive("postdisplaypenalty", ASSIGN_INT,
  1094. INT_BASE + POST_DISPLAY_PENALTY_CODE);
  1095. primitive("interlinepenalty", ASSIGN_INT,
  1096. INT_BASE + INTER_LINE_PENALTY_CODE);
  1097. primitive("doublehyphendemerits", ASSIGN_INT,
  1098. INT_BASE + DOUBLE_HYPHEN_DEMERITS_CODE);
  1099. primitive("finalhyphendemerits", ASSIGN_INT,
  1100. INT_BASE + FINAL_HYPHEN_DEMERITS_CODE);
  1101. primitive("adjdemerits", ASSIGN_INT, INT_BASE + ADJ_DEMERITS_CODE);
  1102. primitive("mag", ASSIGN_INT, INT_BASE + MAG_CODE);
  1103. primitive("delimiterfactor", ASSIGN_INT, INT_BASE + DELIMITER_FACTOR_CODE);
  1104. primitive("looseness", ASSIGN_INT, INT_BASE + LOOSENESS_CODE);
  1105. primitive("time", ASSIGN_INT, INT_BASE + TIME_CODE);
  1106. primitive("day", ASSIGN_INT, INT_BASE + DAY_CODE);
  1107. primitive("month", ASSIGN_INT, INT_BASE + MONTH_CODE);
  1108. primitive("year", ASSIGN_INT, INT_BASE + YEAR_CODE);
  1109. primitive("showboxbreadth", ASSIGN_INT, INT_BASE + SHOW_BOX_BREADTH_CODE);
  1110. primitive("showboxdepth", ASSIGN_INT, INT_BASE + SHOW_BOX_DEPTH_CODE);
  1111. primitive("hbadness", ASSIGN_INT, INT_BASE + HBADNESS_CODE);
  1112. primitive("vbadness", ASSIGN_INT, INT_BASE + VBADNESS_CODE);
  1113. primitive("pausing", ASSIGN_INT, INT_BASE + PAUSING_CODE);
  1114. primitive("tracingonline", ASSIGN_INT, INT_BASE + TRACING_ONLINE_CODE);
  1115. primitive("tracingmacros", ASSIGN_INT, INT_BASE + TRACING_MACROS_CODE);
  1116. primitive("tracingstats", ASSIGN_INT, INT_BASE + TRACING_STATS_CODE);
  1117. primitive("tracingoutput", ASSIGN_INT, INT_BASE + TRACING_OUTPUT_CODE);
  1118. primitive("tracingparagraphs", ASSIGN_INT, INT_BASE + TRACING_PARAGRAPHS_CODE);
  1119. primitive("tracingpages", ASSIGN_INT, INT_BASE + TRACING_PAGES_CODE);
  1120. primitive("tracinglostchars", ASSIGN_INT, INT_BASE + TRACING_LOST_CHARS_CODE);
  1121. primitive("tracingcommands", ASSIGN_INT, INT_BASE + TRACING_COMMANDS_CODE);
  1122. primitive("tracingrestores", ASSIGN_INT, INT_BASE + TRACING_RESTORES_CODE);
  1123. primitive("uchyph", ASSIGN_INT, INT_BASE + UC_HYPH_CODE);
  1124. primitive("outputpenalty", ASSIGN_INT, INT_BASE + OUTPUT_PENALTY_CODE);
  1125. primitive("maxdeadcycles", ASSIGN_INT, INT_BASE + MAX_DEAD_CYCLES_CODE);
  1126. primitive("floatingpenalty", ASSIGN_INT, INT_BASE + FLOATING_PENALTY_CODE);
  1127. primitive("globaldefs", ASSIGN_INT, INT_BASE + GLOBAL_DEFS_CODE);
  1128. primitive("fam", ASSIGN_INT, INT_BASE + CUR_FAM_CODE);
  1129. primitive("escapechar", ASSIGN_INT, INT_BASE + ESCAPE_CHAR_CODE);
  1130. primitive("defaulthyphenchar", ASSIGN_INT, INT_BASE + DEFAULT_HYPHEN_CHAR_CODE);
  1131. primitive("defaultskewchar", ASSIGN_INT, INT_BASE + DEFAULT_SKEW_CHAR_CODE);
  1132. primitive("endlinechar", ASSIGN_INT, INT_BASE + END_LINE_CHAR_CODE);
  1133. primitive("newlinechar", ASSIGN_INT, INT_BASE + NEW_LINE_CHAR_CODE);
  1134. primitive("parindent", ASSIGN_DIMEN, DIMEN_BASE + PAR_INDENT_CODE);
  1135. primitive("mathsurround", ASSIGN_DIMEN, DIMEN_BASE + MATH_SURROUND_CODE);
  1136. primitive("lineskiplimit", ASSIGN_DIMEN, DIMEN_BASE + LINE_SKIP_LIMIT_CODE);
  1137. primitive("hsize", ASSIGN_DIMEN, DIMEN_BASE + HSIZE_CODE);
  1138. primitive("vsize", ASSIGN_DIMEN, DIMEN_BASE + VSIZE_CODE);
  1139. primitive("maxdepth", ASSIGN_DIMEN, DIMEN_BASE + MAX_DEPTH_CODE);
  1140. primitive("splitmaxdepth", ASSIGN_DIMEN, DIMEN_BASE + SPLIT_MAX_DEPTH_CODE);
  1141. primitive("boxmaxdepth", ASSIGN_DIMEN, DIMEN_BASE + BOX_MAX_DEPTH_CODE);
  1142. primitive("hfuzz", ASSIGN_DIMEN, DIMEN_BASE + HFUZZ_CODE);
  1143. primitive("vfuzz", ASSIGN_DIMEN, DIMEN_BASE + VFUZZ_CODE);
  1144. primitive("delimitershortfall", ASSIGN_DIMEN,
  1145. DIMEN_BASE + DELIMITER_SHORTFALL_CODE);
  1146. primitive("nulldelimiterspace", ASSIGN_DIMEN,
  1147. DIMEN_BASE + NULL_DELIMITER_SPACE_CODE);
  1148. primitive("scriptspace", ASSIGN_DIMEN, DIMEN_BASE + SCRIPT_SPACE_CODE);
  1149. primitive("predisplaysize", ASSIGN_DIMEN, DIMEN_BASE + PRE_DISPLAY_SIZE_CODE);
  1150. primitive("displaywidth", ASSIGN_DIMEN, DIMEN_BASE + DISPLAY_WIDTH_CODE);
  1151. primitive("displayindent", ASSIGN_DIMEN, DIMEN_BASE + DISPLAY_INDENT_CODE);
  1152. primitive("overfullrule", ASSIGN_DIMEN, DIMEN_BASE + OVERFULL_RULE_CODE);
  1153. primitive("hangafter", ASSIGN_INT, INT_BASE + HANG_AFTER_CODE);
  1154. primitive("hangindent", ASSIGN_DIMEN, DIMEN_BASE + HANG_INDENT_CODE);
  1155. primitive("hoffset", ASSIGN_DIMEN, DIMEN_BASE + H_OFFSET_CODE);
  1156. primitive("voffset", ASSIGN_DIMEN, DIMEN_BASE + V_OFFSET_CODE);
  1157. primitive(" ", EX_SPACE, 0);
  1158. primitive("/", ITAL_CORR, 0);
  1159. primitive("accent", ACCENT, 0);
  1160. primitive("advance", ADVANCE, 0);
  1161. primitive("afterassignment", AFTER_ASSIGNMENT, 0);
  1162. primitive("aftergroup", AFTER_GROUP, 0);
  1163. primitive("begingroup", BEGIN_GROUP, 0);
  1164. primitive("char", CHAR_NUM, 0);
  1165. primitive("csname", CS_NAME, 0);
  1166. primitive("font", DEF_FONT, 0);
  1167. primitive("fontdimen", ASSIGN_FONT_DIMEN, 0);
  1168. primitive("nullfont", SET_FONT, NULL_FONT);
  1169. eqtb[FROZEN_NULL_FONT] = eqtb[cur_val];
  1170. font_name[NULL_FONT] =
  1171. text(FROZEN_NULL_FONT) = text(cur_val);
  1172. font_area[NULL_FONT] = null_str;
  1173. primitive("delimiter", DELIM_NUM, 0);
  1174. primitive("divide", DIVIDE, 0);
  1175. primitive("endcsname", END_CS_NAME, 0);
  1176. primitive("endgroup", END_GROUP, 0);
  1177. text(FROZEN_END_GROUP) = make_string_given("endgroup");
  1178. eqtb[FROZEN_END_GROUP] = eqtb[cur_val];
  1179. primitive("expandafter", EXPAND_AFTER, 0);
  1180. primitive("halign", HALIGN, 0);
  1181. primitive("hrule", HRULE, 0);
  1182. primitive("ignorespaces", IGNORE_SPACES, 0);
  1183. primitive("insert", INSERT, 0);
  1184. primitive("mark", MARK, 0);
  1185. primitive("topmark", TOP_BOT_MARK, TOP_MARK_CODE);
  1186. primitive("firstmark", TOP_BOT_MARK, FIRST_MARK_CODE);
  1187. primitive("botmark", TOP_BOT_MARK, BOT_MARK_CODE);
  1188. primitive("splitfirstmark", TOP_BOT_MARK, SPLIT_FIRST_MARK_CODE);
  1189. primitive("splitbotmark", TOP_BOT_MARK, SPLIT_BOT_MARK_CODE);
  1190. primitive("mathaccent", MATH_ACCENT, 0);
  1191. primitive("mathchar", MATH_CHAR_NUM, 0);
  1192. primitive("mathchoice", MATH_CHOICE, 0);
  1193. primitive("multiply", MULTIPLY, 0);
  1194. primitive("noalign", NO_ALIGN, 0);
  1195. primitive("noexpand", NO_EXPAND, 0);
  1196. eq_type(FROZEN_DONT_EXPAND) = DONT_EXPAND;
  1197. text(FROZEN_DONT_EXPAND) = make_string_given("notexpanded:");/*DIFF*/
  1198. primitive("nonscript", NON_SCRIPT, 0);
  1199. primitive("omit", OMIT, 0);
  1200. primitive("parshape", SET_SHAPE, 0);
  1201. primitive("penalty", BREAK_PENALTY, 0);
  1202. primitive("prevgraf", SET_PREV_GRAF, 0);
  1203. primitive("radical", RADICAL, 0);
  1204. primitive("read", READ_TO_CS, 0);
  1205. primitive("relax", RELAX, 256);
  1206. text(FROZEN_RELAX) = make_string_given("relax");
  1207. eqtb[FROZEN_RELAX] = eqtb[cur_val];
  1208. primitive("setbox", SET_BOX, 0);
  1209. primitive("the", THE, 0);
  1210. primitive("toks", TOKS_REGISTER, 0);
  1211. primitive("vadjust", VADJUST, 0);
  1212. primitive("valign", VALIGN, 0);
  1213. primitive("vcenter", VCENTER, 0);
  1214. primitive("vrule", VRULE, 0);
  1215. primitive("par", PAR_END, 0);
  1216. par_loc = cur_val; par_token = CS_TOKEN_FLAG + par_loc;
  1217. primitive("count", REGISTER, INT_VAL);
  1218. primitive("dimen", REGISTER, DIMEN_VAL);
  1219. primitive("skip", REGISTER, GLUE_VAL);
  1220. primitive("muskip", REGISTER, MU_VAL);
  1221. primitive("spacefactor", SET_AUX, HMODE);
  1222. primitive("prevdepth", SET_AUX, VMODE);
  1223. primitive("deadcycles", SET_PAGE_INT, 0);
  1224. primitive("insertpenalties", SET_PAGE_INT, 1);
  1225. primitive("wd", SET_BOX_DIMEN, WIDTH_OFFSET);
  1226. primitive("ht", SET_BOX_DIMEN, HEIGHT_OFFSET);
  1227. primitive("dp", SET_BOX_DIMEN, DEPTH_OFFSET);
  1228. primitive("pagegoal", SET_PAGE_DIMEN, 0);
  1229. primitive("pagetotal", SET_PAGE_DIMEN, 1);
  1230. primitive("pagestretch", SET_PAGE_DIMEN, 2);
  1231. primitive("pagefilstretch", SET_PAGE_DIMEN, 3);
  1232. primitive("pagefillstretch", SET_PAGE_DIMEN, 4);
  1233. primitive("pagefilllstretch", SET_PAGE_DIMEN, 5);
  1234. primitive("pageshrink", SET_PAGE_DIMEN, 6);
  1235. primitive("pagedepth", SET_PAGE_DIMEN, 7);
  1236. primitive("lastpenalty", LAST_ITEM, INT_VAL);
  1237. primitive("lastkern", LAST_ITEM, DIMEN_VAL);
  1238. primitive("lastskip", LAST_ITEM, GLUE_VAL);
  1239. primitive("input", INPUT, 0);
  1240. primitive("endinput", INPUT, 1);
  1241. primitive("number", CONVERT, NUMBER_CODE);
  1242. primitive("romannumeral", CONVERT, ROMAN_NUMERAL_CODE);
  1243. primitive("string", CONVERT, STRING_CODE);
  1244. primitive("meaning", CONVERT, MEANING_CODE);
  1245. primitive("fontname", CONVERT, FONT_NAME_CODE);
  1246. primitive("jobname", CONVERT, JOB_NAME_CODE);
  1247. primitive("if", IF_TEST, IF_CHAR_CODE);
  1248. primitive("ifcat", IF_TEST, IF_CAT_CODE);
  1249. primitive("ifnum", IF_TEST, IF_INT_CODE);
  1250. primitive("ifdim", IF_TEST, IF_DIM_CODE);
  1251. primitive("ifodd", IF_TEST, IF_ODD_CODE);
  1252. primitive("ifvmode", IF_TEST, IF_VMODE_CODE);
  1253. primitive("ifhmode", IF_TEST, IF_HMODE_CODE);
  1254. primitive("ifmmode", IF_TEST, IF_MMODE_CODE);
  1255. primitive("ifinner", IF_TEST, IF_INNER_CODE);
  1256. primitive("ifvoid", IF_TEST, IF_VOID_CODE);
  1257. primitive("ifhbox", IF_TEST, IF_HBOX_CODE);
  1258. primitive("ifvbox", IF_TEST, IF_VBOX_CODE);
  1259. primitive("ifx", IF_TEST, IFX_CODE);
  1260. primitive("ifeof", IF_TEST, IF_EOF_CODE);
  1261. primitive("iftrue", IF_TEST, IF_TRUE_CODE);
  1262. primitive("iffalse", IF_TEST, IF_FALSE_CODE);
  1263. primitive("ifcase", IF_TEST, IF_CASE_CODE);
  1264. primitive("fi", FI_OR_ELSE, FI_CODE); 
  1265. text(FROZEN_FI) = make_string_given("fi");
  1266. eqtb[FROZEN_FI] = eqtb[cur_val];
  1267. primitive("or", FI_OR_ELSE, OR_CODE);
  1268. primitive("else", FI_OR_ELSE, ELSE_CODE);
  1269. primitive("hskip", HSKIP, SKIP_CODE);
  1270. primitive("hfil", HSKIP, FIL_CODE);
  1271. primitive("hfill", HSKIP, FILL_CODE);
  1272. primitive("hss", HSKIP, SS_CODE);
  1273. primitive("hfilneg",  HSKIP, FIL_NEG_CODE);
  1274. primitive("vskip", VSKIP, SKIP_CODE);
  1275. primitive("vfil", VSKIP, FIL_CODE);
  1276. primitive("vfill", VSKIP, FILL_CODE);
  1277. primitive("vss", VSKIP, SS_CODE);
  1278. primitive("vfilneg", VSKIP, FIL_NEG_CODE);
  1279. primitive("mskip", MSKIP, MSKIP_CODE);
  1280. primitive("kern", KERN, EXPLICIT);
  1281. primitive("mkern", MKERN, MU_GLUE);
  1282. primitive("moveleft", HMOVE, 1);
  1283. primitive("moveright", HMOVE, 0);
  1284. primitive("raise", VMOVE, 1);
  1285. primitive("lower", VMOVE, 0);
  1286. primitive("box", MAKE_BOX, BOX_CODE);
  1287. primitive("copy", MAKE_BOX, COPY_CODE);
  1288. primitive("lastbox", MAKE_BOX, LAST_BOX_CODE);
  1289. primitive("vsplit", MAKE_BOX, VSPLIT_CODE);
  1290. primitive("vtop", MAKE_BOX, VTOP_CODE);
  1291. primitive("vbox", MAKE_BOX, VTOP_CODE + VMODE);
  1292. primitive("hbox", MAKE_BOX, VTOP_CODE + HMODE);
  1293. primitive("indent", START_PAR, 1);
  1294. primitive("noindent", START_PAR, 0);
  1295. primitive("shipout", LEADER_SHIP, A_LEADERS - 1);
  1296. primitive("leaders", LEADER_SHIP, A_LEADERS);
  1297. primitive("cleaders", LEADER_SHIP, C_LEADERS);
  1298. primitive("xleaders", LEADER_SHIP, X_LEADERS);
  1299. primitive("unpenalty", REMOVE_ITEM, PENALTY_NODE);
  1300. primitive("unkern", REMOVE_ITEM, KERN_NODE);
  1301. primitive("unskip", REMOVE_ITEM, GLUE_NODE);
  1302. primitive("unhbox", UN_HBOX, BOX_CODE);
  1303. primitive("unhcopy", UN_HBOX, COPY_CODE);
  1304. primitive("unvbox", UN_VBOX, BOX_CODE);
  1305. primitive("unvcopy", UN_VBOX, COPY_CODE);
  1306. primitive("discretionary", DISCRETIONARY, 0);
  1307. primitive("-", DISCRETIONARY, 1);
  1308. primitive("eqno", EQ_NO, 0);
  1309. primitive("leqno", EQ_NO, 1);
  1310. primitive("mathord", MATH_COMP, ORD_NOAD);
  1311. primitive("mathop", MATH_COMP, OP_NOAD);
  1312. primitive("mathbin", MATH_COMP, BIN_NOAD);
  1313. primitive("mathrel", MATH_COMP, REL_NOAD);
  1314. primitive("mathopen", MATH_COMP, OPEN_NOAD);
  1315. primitive("mathclose", MATH_COMP, CLOSE_NOAD);
  1316. primitive("mathpunct", MATH_COMP, PUNCT_NOAD);
  1317. primitive("mathinner", MATH_COMP, INNER_NOAD);
  1318. primitive("underline", MATH_COMP, UNDER_NOAD);
  1319. primitive("overline", MATH_COMP, OVER_NOAD);
  1320. primitive("displaylimits", LIMIT_SWITCH, NORMAL);
  1321. primitive("limits", LIMIT_SWITCH, LIMITS);
  1322. primitive("nolimits", LIMIT_SWITCH, NO_LIMITS);
  1323. primitive("displaystyle", MATH_STYLE, DISPLAY_STYLE);
  1324. primitive("textstyle", MATH_STYLE, TEXT_STYLE);
  1325. primitive("scriptstyle", MATH_STYLE, SCRIPT_STYLE);
  1326. primitive("scriptscriptstyle", MATH_STYLE, SCRIPT_SCRIPT_STYLE);
  1327. primitive("above", ABOVE, ABOVE_CODE);
  1328. primitive("over", ABOVE, OVER_CODE);
  1329. primitive("atop", ABOVE, ATOP_CODE);
  1330. primitive("abovewithdelims", ABOVE, DELIMITED_CODE + ABOVE_CODE);
  1331. primitive("overwithdelims", ABOVE, DELIMITED_CODE + OVER_CODE);
  1332. primitive("atopwithdelims", ABOVE, DELIMITED_CODE + ATOP_CODE);
  1333. primitive("left", LEFT_RIGHT, LEFT_NOAD);
  1334. primitive("right", LEFT_RIGHT, RIGHT_NOAD);
  1335. text(FROZEN_RIGHT) = make_string_given("right");
  1336. eqtb[FROZEN_RIGHT] = eqtb[cur_val];
  1337. primitive("span", TAB_MARK, SPAN_CODE);
  1338. primitive("cr", CAR_RET, CR_CODE);
  1339. text(FROZEN_CR) = text(cur_val);
  1340. eqtb[FROZEN_CR] = eqtb[cur_val];
  1341. primitive("crcr", CAR_RET, CR_CR_CODE);
  1342. text(FROZEN_END_TEMPLATE) = make_string_given("endtemplate");
  1343. text(FROZEN_ENDV) = text(FROZEN_END_TEMPLATE);
  1344. eq_type(FROZEN_ENDV) = ENDV;
  1345. equiv(FROZEN_ENDV) = null_list;
  1346. eq_level(FROZEN_ENDV) = LEVEL_ONE;
  1347. eqtb[FROZEN_END_TEMPLATE] = eqtb[FROZEN_ENDV];
  1348. eq_type(FROZEN_END_TEMPLATE) = END_TEMPLATE;
  1349. primitive("long", PREFIX, 1);
  1350. primitive("outer", PREFIX, 2);
  1351. primitive("global", PREFIX, 4);
  1352. primitive("def", DEF, 0);
  1353. primitive("gdef", DEF, 1);
  1354. primitive("edef", DEF, 2);
  1355. primitive("xdef", DEF, 3);
  1356. primitive("let", LET, NORMAL);
  1357. primitive("futurelet", LET, NORMAL + 1);
  1358. primitive("chardef", SHORTHAND_DEF, CHAR_DEF_CODE);
  1359. primitive("mathchardef", SHORTHAND_DEF, MATH_CHAR_DEF_CODE);
  1360. primitive("countdef", SHORTHAND_DEF, COUNT_DEF_CODE);
  1361. primitive("dimendef", SHORTHAND_DEF, DIMEN_DEF_CODE);
  1362. primitive("skipdef", SHORTHAND_DEF, SKIP_DEF_CODE);
  1363. primitive("muskipdef", SHORTHAND_DEF, MU_SKIP_DEF_CODE);
  1364. primitive("toksdef", SHORTHAND_DEF, TOKS_DEF_CODE);
  1365. primitive("catcode", DEF_CODE, CAT_CODE_BASE);
  1366. primitive("mathcode", DEF_CODE, MATH_CODE_BASE);
  1367. primitive("lccode", DEF_CODE, LC_CODE_BASE);
  1368. primitive("uccode", DEF_CODE, UC_CODE_BASE);
  1369. primitive("sfcode", DEF_CODE, SF_CODE_BASE);
  1370. primitive("delcode", DEF_CODE, DEL_CODE_BASE);
  1371. primitive("textfont", DEF_FAMILY, MATH_FONT_BASE); 
  1372. primitive("scriptfont", DEF_FAMILY, MATH_FONT_BASE + SCRIPT_SIZE);
  1373. primitive("scriptscriptfont", DEF_FAMILY, MATH_FONT_BASE + SCRIPT_SCRIPT_SIZE);
  1374. primitive("hyphenation", HYPH_DATA, 0);
  1375. primitive("patterns", HYPH_DATA, 1);
  1376. primitive("hyphenchar", ASSIGN_FONT_INT, 0);
  1377. primitive("skewchar", ASSIGN_FONT_INT, 1);
  1378. primitive("batchmode", SET_INTERACTION,  BATCH_MODE);
  1379. primitive("nonstopmode", SET_INTERACTION, NONSTOP_MODE);
  1380. primitive("scrollmode", SET_INTERACTION, SCROLL_MODE);
  1381. primitive("errorstopmode", SET_INTERACTION, ERROR_STOP_MODE);
  1382. primitive("closein", IN_STREAM, 0);
  1383. primitive("openin", IN_STREAM, 1);
  1384. primitive("message", MESSAGE, 0);
  1385. primitive("errmessage", MESSAGE, 1);
  1386. primitive("lowercase", CASE_SHIFT, LC_CODE_BASE);
  1387. primitive("uppercase", CASE_SHIFT, UC_CODE_BASE);
  1388. primitive("show", XRAY, SHOW_CODE);
  1389. primitive("showbox", XRAY, SHOW_BOX_CODE);
  1390. primitive("showthe", XRAY, SHOW_THE_CODE);
  1391. primitive("showlists", XRAY, SHOW_LISTS);
  1392. primitive("openout", EXTENSION, OPEN_NODE);
  1393. primitive("write", EXTENSION, WRITE_NODE);
  1394. write_loc = cur_val;
  1395. text(END_WRITE) = make_string_given("endwrite");
  1396. eq_level(END_WRITE) = LEVEL_ONE;
  1397. eq_type(END_WRITE) = OUTER_CALL;
  1398. equiv(END_WRITE) = NULL;
  1399. primitive("closeout", EXTENSION, CLOSE_NODE);
  1400. primitive("special", EXTENSION, SPECIAL_NODE);
  1401. primitive("immediate", EXTENSION, IMMEDIATE_CODE);
  1402. primitive("end", STOP, 0);
  1403. primitive("dump", STOP, 1);
  1404. text(FROZEN_PROTECTION) = make_string_given("inaccessible");
  1405. no_new_control_sequence = TRUE;
  1406. #endif
  1407. }
  1408.